home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 376-400 / disk_388 / dclock / dclockmenu.rexx < prev    next >
OS/2 REXX Batch file  |  1992-05-06  |  12KB  |  433 lines

  1. /* DClockMenu.rexx by Stefan Sticht  PUBLIC DOMAIN
  2.  
  3.    DClockMenu is a short ARexx program which allows you to change
  4.    the options of DClock v1.20+ easily via requesters.
  5. */
  6.  
  7. VERSION = "v1.20"
  8.  
  9. IF ~SHOW('L','rexxsupport.library') THEN
  10.     IF EXISTS("LIBS:rexxsupport.library") THEN DO
  11.         CALL ADDLIB('rexxsupport.library',0,-30)
  12.         END
  13.     ELSE DO
  14.         Say "Got problems allocating rexxsupport.library"
  15.         EXIT
  16.         END
  17.  
  18. SIGNAL ON HALT      /* tell arexx to signal us that the HI */
  19. SIGNAL ON BREAK_C   /* command has been used and trap also */
  20. SIGNAL ON BREAK_D   /* break signals */
  21. SIGNAL ON BREAK_E
  22. SIGNAL ON BREAK_F
  23.  
  24. OPTIONS FAILAT 20
  25. OPTIONS RESULTS     /* Allow DClock to send results */
  26. ADDRESS "DCLOCK"    /* DClock shall be our host     */
  27.  
  28. PARSE ARG argument  /* get command line arguments   */
  29. IF argument = "?" THEN EXIT(info())
  30.  
  31. /* we require the rexxarplib.library; is it available ? */
  32. IF ~SHOW(LIBRARIES,"rexxarplib.library") THEN DO
  33.     IF EXISTS("libs:rexxarplib.library") THEN DO
  34.         CALL ADDLIB("rexxarplib.library",0,-30)
  35.         END
  36.     ELSE DO
  37.         SAY "DClockMenu requires the rexxarplib.library v2.3 or later!"
  38.         SAY "It can be found on your ARexx Disk. Please copy the"
  39.         SAY "library to your 'libs:' directory!"
  40.         EXIT
  41.         END
  42.     END
  43.  
  44. dclock.on = SHOW("PORTS","DCLOCK") /* is DClock already running ? */
  45. IF ~dclock.on THEN DO
  46.     CALL req("DClock has to be started first!")
  47.     EXIT
  48.     END
  49.  
  50. ADDRESS AREXX "'CALL CreateHost(DCHOST,DCPORT,)'" /* create     */
  51. DO FOR 50 WHILE ~SHOW("PORTS","DCHOST")           /* a new host */
  52.     CALL DELAY(10)                                /* for us     */
  53.     END
  54.  
  55. IF ~SHOW("PORTS","DCHOST") THEN DO     /* did the host really open ? */
  56.     CALL req("Can't create a new host!")              /* no, so quit */
  57.     EXIT
  58.     END
  59.  
  60. CALL SETREQCOLOR(DCHOST, BLOCKPEN, 1)      /* change color of window */
  61. CALL SETREQCOLOR(DCHOST, DETAILPEN, 0)
  62.  
  63. idcmp    = "CLOSEWINDOW GADGETUP MENUPICK"
  64. flags    = "ACTIVATE WINDOWDRAG WINDOWDEPTH WINDOWCLOSE"
  65. width    = 415
  66. height   = 150
  67. leftedge = (SCREENCOLS() - width) % 2
  68. topedge  = 20
  69.  
  70. ok = OPENWINDOW(DCHOST,leftedge,topedge,width,height,idcmp,flags,,
  71.                 "DClock Menu")
  72. IF ~ok THEN DO
  73.     CALL req("Can't open window!")
  74.     CALL QUIT(DCHOST)
  75.     EXIT
  76.     END
  77.  
  78. ok = OPENPORT(DCPORT)                       /* open the message port */
  79. IF ~ok THEN DO
  80.     CALL req("Can't open new message port!")
  81.     CALL QUIT(DCHOST)
  82.     EXIT
  83.     END
  84.  
  85.  
  86. /*
  87.  * Get all current settings from DClock
  88.  */
  89.  
  90. STATUS
  91.  
  92. PARSE VAR RESULT . dclock.beep . dclock.click . dclock.clickvolume,
  93.                  . dclock.priority . dclock.textcolor . dclock.backcolor,
  94.                  . dclock.alarm . dclock.alarmtime . dclock.setenv,
  95.                  . dclock.version . dclock.countdown . dclock.hour,
  96.                  . dclock.seconds . dclock.sound .
  97.  
  98.  
  99. /*
  100.  * Menus
  101.  */
  102.  
  103. CALL SETAPEN(DCHOST,2)                          /* change detail pen */
  104. CALL ADDMENU(DCHOST,"DClock Menu")              /* add a menu        */
  105. CALL ADDITEM(DCHOST,"Version","VERSION","V",,)  /* and two items     */
  106. CALL ADDITEM(DCHOST,"Quit","CLOSEWINDOW","Q",,)
  107.  
  108.  
  109. /*
  110.  * Gadgets:
  111.  */
  112.  
  113. ontext  = " ON  "
  114. offtext = " OFF "
  115. fontB = 7        /* Baseline offset                         */
  116. x   = 20         /* LeftEdge of first gadget                */
  117. y   = 20         /* TopEdge of first gadget                 */
  118. dx  = 100        /* horizontal offset of second gadget row  */
  119. dy  = 18         /* vertical offset of next gadget          */
  120. gadhsize = 45    /* horizontal size of simple string gadget */
  121.  
  122. /*
  123.  * Switches:
  124.  */
  125.  
  126. CALL ADDGADGET(DCHOST, x, y, "BEEP", "  BEEP   ", "BEEP")
  127. CALL SETGADGET(DCHOST, "BEEP", dclock.beep)
  128. CALL ADDGADGET(DCHOST, x + dx, y, "CLICK", "  CLICK  ", "CLICK")
  129. CALL SETGADGET(DCHOST, "CLICK", dclock.click)
  130. CALL ADDGADGET(DCHOST, x + dx + dx, y, "ALARM", "  ALARM  ", "ALARM")
  131. CALL SETGADGET(DCHOST, "ALARM", dclock.alarm)
  132. CALL ADDGADGET(DCHOST, x + dx + dx + dx, y, "SETENV", " SETENV  ", "SETENV")
  133. CALL SETGADGET(DCHOST, "SETENV", dclock.setenv)
  134. y = y + dy
  135. CALL ADDGADGET(DCHOST, x, y, "HOUR", "  HOUR   ", "HOUR")
  136. CALL SETGADGET(DCHOST, "HOUR", dclock.hour)
  137. CALL ADDGADGET(DCHOST, x + dx, y, "SECONDS", " SECONDS ", "SECONDS")
  138. CALL SETGADGET(DCHOST, "SECONDS", dclock.seconds)
  139.  
  140.  
  141. /*
  142.  * Stringgadgets: these definitions are repeated below!
  143.  */
  144.  
  145. y1 = y + dy
  146.  
  147.  
  148. CALL MOVE(DCHOST, x, y1 + fontB)
  149. CALL TEXT(DCHOST,"ALARMTIME:")
  150. CALL ADDGADGET(DCHOST, x + dx, y1, "ALARMTIME", " " ||, 
  151.                dclock.alarmtime, "ALARMTIME %g", 80)
  152.  
  153. /* this isn't a string gadget! */
  154. CALL MOVE(DCHOST, x + dx + dx, y1 + fontB)
  155. CALL TEXT(DCHOST,"SOUNDFILE:")
  156. CALL ADDGADGET(DCHOST, x + 3 * dx, y1, "SOUND", CENTER(dclock.sound, 5),,
  157.                "SOUND")
  158.  
  159. y2 = y1 + dy;
  160.  
  161. CALL MOVE(DCHOST, x, y2 + fontB)
  162. CALL TEXT(DCHOST,"COUNTDOWN:")
  163. CALL ADDGADGET(DCHOST, x + dx, y2, "COUNTDOWN", CENTER(dclock.countdown, 7),,
  164.                "COUNTDOWN %g", gadhsize)
  165.  
  166. CALL MOVE(DCHOST, x + dx + dx, y2 + fontB)
  167. CALL TEXT(DCHOST,"PRIORITY:")
  168. CALL ADDGADGET(DCHOST, x + 3 * dx, y2, "PRIORITY", CENTER(dclock.priority, 7),,
  169.                "PRIORITY %g", gadhsize)
  170.  
  171. y3 = y2 + dy;
  172.  
  173. CALL MOVE(DCHOST, x, y3 + fontB)
  174. CALL TEXT(DCHOST,"TEXTCOLOUR:")
  175. CALL ADDGADGET(DCHOST, x + dx, y3, "TEXTCOLOR", CENTER(dclock.textcolor, 7),,
  176.                "TEXTCOLOR %g", gadhsize)
  177.  
  178. CALL MOVE(DCHOST, x + dx + dx, y3 + fontB)
  179. CALL TEXT(DCHOST,"BACKCOLOUR:")
  180. CALL ADDGADGET(DCHOST, x + 3 * dx, y3, "BACKCOLOR",,
  181.                CENTER(dclock.backcolor, 7), "BACKCOLOR %g", gadhsize)
  182.  
  183. y4 = y3 + dy;
  184.  
  185. CALL MOVE(DCHOST, x, y4 + fontB)
  186. CALL TEXT(DCHOST,"CLICKVOLUME:")
  187. CALL ADDGADGET(DCHOST, x + dx, y4, "CLICKVOL", CENTER(dclock.clickvolume, 7),,
  188.                "CLICKVOLUME %g", gadhsize)
  189.  
  190. /* Not implemented yet !
  191. /*
  192.  * Other gadgets:
  193.  */
  194.  
  195. y = y + dy
  196.  
  197. CALL ADDGADGET(DCHOST, x + 30, y, "remove", " REMOVE DCLOCK  ",,
  198.                "REMOVE")
  199. CALL ADDGADGET(DCHOST, x + dx + dx, y, "refresh", " REFRESH DCLOCK ",,
  200.                "REFRESH")
  201. */
  202.  
  203. /*
  204.  * Call the main-routine:
  205.  */
  206.  
  207. CALL lookport()
  208.  
  209. EXIT
  210.  
  211. /*
  212. * lookport: watch our message port for incoming messages
  213. */
  214. lookport:
  215.     quitflag = 0
  216.     DO FOREVER UNTIL quitflag
  217.         CALL WAITPKT(DCPORT)
  218.         pkt = GETPKT(DCPORT)
  219.         IF pkt ~= NULL() THEN DO
  220.             arg = GETARG(pkt)
  221.             CALL REPLY(pkt, 0)
  222.             SELECT
  223.                 WHEN arg = "CLOSEWINDOW" THEN quitflag = 1
  224.                 WHEN arg = "VERSION"    THEN CALL version()
  225.                 WHEN LEFT(arg,9) = "CLICKVOLU" THEN CALL clickvol(arg)
  226.                 WHEN LEFT(arg,9) = "ALARMTIME" THEN CALL alarmtime(arg)
  227.                 WHEN LEFT(arg,9) = "COUNTDOWN" THEN CALL countdown(arg)
  228.                 WHEN LEFT(arg,8) = "PRIORITY"  THEN CALL priority(arg)
  229.                 WHEN LEFT(arg,9) = "TEXTCOLOR" THEN CALL textcolor(arg)
  230.                 WHEN LEFT(arg,9) = "BACKCOLOR" THEN CALL backcolor(arg)
  231.                 WHEN arg = "SOUND"             THEN CALL soundfile
  232.                 WHEN arg = "REMOVE"            THEN NOP
  233.                 WHEN arg = "REFRESH"           THEN NOP
  234.                 OTHERWISE CALL switch(arg)
  235.                 END
  236.             END
  237.         END
  238.     CALL quitcleanup("ok")
  239.     RETURN(0)
  240.  
  241. /*
  242. * quitcleanup: close all opened resources and exit
  243. */
  244. quitcleanup:
  245.     PARSE ARG msg
  246.     CALL CLOSEPORT(DCPORT)
  247.     CALL QUIT(DCHOST)
  248.     IF msg ~= "ok" THEN SAY msg
  249.     EXIT
  250.  
  251.  
  252. /*
  253.  * switch: change the status of a option
  254.  */
  255. switch: PROCEDURE EXPOSE dclock.
  256.     ARG option
  257.  
  258.     IF dclock.option = "ON" THEN dclock.option = "OFF"
  259.     ELSE dclock.option = "ON"
  260.  
  261.     INTERPRET option dclock.option
  262.     CALL SETGADGET(DCHOST, option, dclock.option)
  263.  
  264.     RETURN(0)
  265.  
  266. /*
  267.  * version: display current DClock Version number
  268.  */
  269. version: PROCEDURE
  270.     STATUS VERSION
  271.     text = "DClock V1." || RESULT "is installed."
  272.     CALL req(text)
  273.     RETURN(0)
  274.  
  275. /*
  276. * alarmtime: a new time has been entered, check it
  277. */
  278. alarmtime: PROCEDURE
  279.     PARSE ARG time
  280.     time = SUBWORD(time,2,1)
  281.     IF LENGTH(time) = 8 THEN DO
  282.         ALARMTIME time
  283.         IF RC > 0 THEN DO
  284.             CALL req("Can't change alarmtime!\Perhaps invalid format?")
  285.             END
  286.         END
  287.     ELSE CALL req("Alarm time format has to be in the format HH:MM:SS!")
  288.     RETURN(0)
  289.  
  290. /*
  291. * countdown: a new time has been entered, check it
  292. */
  293. countdown: PROCEDURE EXPOSE dclock.
  294.     PARSE ARG count
  295.     count = SUBWORD(count, 2, 1)
  296.     IF DATATYPE(count, "NUMERIC") THEN DO
  297.         COUNTDOWN count
  298.         dclock.countdown = count
  299.         END
  300.     ELSE CALL req("Countdown has to be a numeric value!")
  301.     RETURN(0)
  302.  
  303. /*
  304. * priority: a new priority has been entered
  305. */
  306. priority: PROCEDURE EXPOSE dclock.
  307.     PARSE ARG pri
  308.     pri = SUBWORD(pri, 2, 1)
  309.     IF DATATYPE(pri, "NUMERIC") THEN DO
  310.         IF (pri >= -127 & pri <= 127) THEN DO
  311.             PRIORITY pri
  312.             dclock.priority = pri
  313.             END
  314.         ELSE DO
  315.             CALL req("Illegal value for handler task priority\" ||,
  316.                      "(must be between -127 and 127)!")
  317.             END
  318.         END
  319.     ELSE CALL req("Priority must be numeric!")
  320.     RETURN(0)
  321.  
  322. /*
  323. * textcolor: textcolour has been changed
  324. */
  325. textcolor: PROCEDURE EXPOSE dclock.
  326.     PARSE ARG col
  327.     col = SUBWORD(col, 2, 1)
  328.     IF DATATYPE(col, "NUMERIC") THEN DO
  329.         TEXTCOLOUR col
  330.         dclock.textcolor = col
  331.         END
  332.     ELSE CALL req("TEXTCOLOR must be numeric!")
  333.     RETURN(0)
  334.  
  335. /*
  336. * backcolor: backcolour has been changed
  337. */
  338. backcolor: PROCEDURE EXPOSE x dx y3 gadhsize
  339.     PARSE ARG col
  340.     col = SUBWORD(col, 2, 1)
  341.     IF DATATYPE(col, "NUMERIC") THEN DO
  342.         BACKCOLOUR col
  343.         IF RC > 0 THEN req("Can't change background colour!")
  344.         END
  345.     ELSE CALL req("BACKCOLOR must be numeric!")
  346.  
  347.     RETURN(0)
  348.  
  349. /*
  350. * clickvol: the clickvolume has been changed
  351. */
  352. clickvol: PROCEDURE EXPOSE x dx y4 gadhsize
  353.     PARSE ARG vol
  354.     error = 0
  355.     vol = SUBWORD(vol, 2, 1)
  356.     IF DATATYPE(vol, "NUMERIC") THEN DO
  357.         IF (0 < vol | vol > 64) THEN DO
  358.             CALL req("Illegal value for click volume\" ||,
  359.                      "(must be between 0 and 64)!")
  360.             error = 1
  361.             END
  362.         ELSE DO
  363.             CLICKVOLUME vol
  364.             IF RC > 0 THEN DO
  365.                 req("Can't change clickvolume")
  366.                 error = 1
  367.                 END
  368.             END
  369.         END
  370.     ELSE DO 
  371.         CALL req("CLICKVOLUME must be numeric!")
  372.         error = 1
  373.         END
  374.  
  375.     IF error THEN DO
  376.         CALL REMOVEGADGET(DCHOST, "CLICKVOL")
  377.         STATUS CLICKVOLUME
  378.         CALL ADDGADGET(DCHOST, x + dx, y4, "CLICKVOL", " " RESULT,,
  379.                    "CLICKVOLUME %g", gadhsize)
  380.         END
  381.  
  382.     RETURN(0)
  383.  
  384. /*
  385.  * soundfile:
  386.  */
  387. soundfile: PROCEDURE EXPOSE dclock.sound x dx y1
  388.  
  389.     file = GETFILE(0, 12, , , "Select sound file:")
  390.     IF file ~= "" THEN DO
  391.         IF ~EXISTS(file) THEN req("Can't find that file!")
  392.         ELSE DO
  393.             SOUND file
  394.             IF RC > 0 THEN req("Can't load that file!")
  395.             STATUS SOUND
  396.             dclock.sound = RESULT
  397.             CALL REMOVEGADGET(DCHOST, "SOUND")
  398.             CALL ADDGADGET(DCHOST, x + 3 * dx, y1, "SOUND",,
  399.                            CENTER(dclock.sound, 5), "SOUND")
  400.  
  401.             END
  402.         END
  403.     RETURN(0)
  404.  
  405.  
  406. /*
  407. * info: display some information about DClockMenu
  408. */
  409. info: PROCEDURE EXPOSE version
  410.     SAY "DClockMenu " version "by Stefan Sticht"
  411.     SAY "Usage: DClockMenu"
  412.     SAY
  413.     SAY SOURCELINE(3)
  414.     SAY SOURCELINE(4)
  415.     SAY
  416.     RETURN(0)
  417.  
  418. /*
  419. * req: call the requester of the rexxarplib.library with msg
  420. */
  421. req: PROCEDURE
  422.     PARSE ARG msg
  423.     CALL REQUEST(0,12,msg,,," OK ",)
  424.     RETURN(0)
  425.  
  426. BREAK_C:  /* somebody wants to kill us, but before we leave */
  427. BREAK_D:  /* we have to clean up                            */
  428. BREAK_E:
  429. BREAK_F:
  430. HALT:  
  431.     CALL quitcleanup("***user break")
  432.     EXIT
  433.